iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0

Cronjob 技術限制

找了一下,我們似乎不能直接透過 React Native 來實作 cronjob。

筆者找到 Stackoverflow 的這篇,其中提到了可以利用 react-native-background-timer 這個套件加上計算時間差,來達到類似 cronjob 類似的效果。

安裝並 import 套件後,或許會出現類似官方出現需要手動連結套件 (link the library manually) 的錯誤訊息

Android: TypeError: Cannot read property 'setTimeout' of undefined or TypeError: null is not an object (evaluating 'RNBackgroundTimer.setTimeout')

如圖:
https://ithelp.ithome.com.tw/upload/images/20221011/20141357GrHNk47aiX.png

筆者嘗試 react-native-background-timer 官方建議的做法,仍然失敗。

然而在將 Android 虛擬機關機,並且透過此處將虛擬機資料清空 (wipe data):
https://ithelp.ithome.com.tw/upload/images/20221011/20141357iGhV7qhbsv.png

重開虛擬機後,分別在兩個 terminal session 執行:

npx react-native start

以及

npx react-native run-android

反而就順利可以運行了!


基礎 Cronjob 實作

筆者嘗試依照上述 stackoverflow 文章提到的做法實作。

注意我們用的是 Functional Component

const App: () => Node = () => {
  // 中略
}

所以不能用 componentDidMount(),這是 Class Component 的寫法。我們所要使用的是 useEffect(),以下為範例:

  useEffect(() => {
    BackgroundTimer.setTimeout(() => {
      Alert.alert('test background');
    }, 3000);
  });

以下為過三秒後的顯示:
https://ithelp.ithome.com.tw/upload/images/20221011/20141357CRrDFVkdPC.png

算是有初步達成 cronjob 的效果,待明天再來實作推播通知細節。

今天收工!

延伸閱讀


上一篇
實作:App 基本 UI & 功能
下一篇
以 Notifee 實作通知功能
系列文
預測惱人的人事物:跟我一起學習如何用資料分析來避開他們38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言